from typing import Dict, Any, Optional
from app.services.dify_client import DifyClient
from app.core.logger import logger

class InfoService:
    """
    信息服务类
    
    处理应用信息和参数获取功能
    """
    def __init__(self, api_key: Optional[str] = None):
        """
        初始化信息服务
        
        Args:
            api_key: 可选的API密钥，如果不提供则使用环境变量中的配置
        """
        self.client = DifyClient(api_key=api_key)
    
    async def get_app_info(self) -> Dict[str, Any]:
        """
        获取应用信息
        
        Returns:
            应用信息和参数
        """
        logger.debug("获取应用信息")
        return await self.client.request(
            method="GET", 
            endpoint="/parameters"
        )
    
    async def get_basic_info(self) -> Dict[str, Any]:
        """
        获取应用基本信息
        
        Returns:
            应用基本信息，包括名称、描述和标签
        """
        logger.debug("获取应用基本信息")
        return await self.client.request(
            method="GET", 
            endpoint="/info"
        )
    
    async def get_parameters(self) -> Dict[str, Any]:
        """
        获取应用参数
        
        Returns:
            应用参数信息，包括开场白、输入表单等
        """
        logger.debug("获取应用参数")
        return await self.client.request(
            method="GET", 
            endpoint="/parameters"
        )
    
    async def get_meta(self) -> Dict[str, Any]:
        """
        获取应用Meta信息
        
        Returns:
            应用Meta信息，包括工具图标等
        """
        logger.debug("获取应用Meta信息")
        return await self.client.request(
            method="GET", 
            endpoint="/meta"
        )
    
    async def get_message_annotations(self, message_id: str) -> Dict[str, Any]:
        """
        获取消息标注
        
        Args:
            message_id: 消息ID
            
        Returns:
            消息标注数据
        """
        logger.debug(f"获取消息标注: message_id={message_id}")
        return await self.client.request(
            method="GET", 
            endpoint=f"/messages/{message_id}/annotations"
        )
        
    async def get_variable_values(self, variables: Dict[str, Any]) -> Dict[str, Any]:
        """
        获取变量值
        
        Args:
            variables: 变量键值对
            
        Returns:
            变量处理结果
        """
        logger.debug(f"获取变量值: variables={variables}")
        return await self.client.request(
            method="POST", 
            endpoint="/variables/values", 
            data=variables
        )
